package com.cmwa.solution.sys.attach.dao;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import com.cmwa.solution.annotation.MybatisDao;
import com.cmwa.solution.base.entity.SearchParam;
import com.cmwa.solution.sys.attach.entity.AttachRelExtVo;
import com.cmwa.solution.sys.attach.entity.AttachRelVo;
import com.cmwa.solution.sys.attach.entity.AttachVo;
/**
 * 对附件进行操作
 * @author zhengqq
 * @date  2018-09-03
 */
@MybatisDao
@SuppressWarnings("rawtypes")
public interface AttachDao {

	AttachVo findById(String attId);
	
	AttachVo findAttachAndRelByAttId(String attId);
	
	void addAttach(AttachVo vo);
	
	void deleteAttach(AttachVo vo);
	
	void deleteAttachRel(AttachVo vo);
	
	void updateAttach(AttachVo vo);
	
	void updateAttachNameById(Map params);
	/**
	 * 获取附件重复流水号
	 * @return
	 */
	int searchSeNo();
	
	/**
	 * 批量删除附件主表信息
	 * @param list
	 */
	void batchDeleteAttachByIds(@Param("attIds") List<String> attIds);
	/**
	 * 删除附件主表信息
	 */
	void deleteAttachById(@Param("attId")String attId);
	
	/**
	 * 删除扩展附件属性
	 * @param attId
	 */
	void deleteAttachRelExtFlag(@Param("bussessId")String bussessId,@Param("relType")String relType,@Param("attName")String attName,@Param("attValue")String attValue);

	/**
	 * 根据附件id将附件状态更新为DEL
	 * @author ex-weicb
	 * @createDate 2016年5月4日 下午4:06:30
	 * @param attId
	 */
	public void update2DelByAttId(String attId);
	
	/**
	 * 修改附件路径
	 * @param attachVo
	 */
	void updateAttachFilePathByAttId(AttachVo attachVo);
	
	/**
	 * 根据附件关系类型、资源ID，获取附件
	 * @param attIds
	 * @return
	 */
	List<AttachVo> queryAttachByRelIdAndType(@Param("relId")String relId, @Param("relType")String relType);
	
	/**
	 * 获取附件
	 * @param attIds
	 * @return
	 */
	List<AttachVo> findByIds(@Param("array") String[] array);
	
	/**
	 * 新增附件扩展表
	 * @param attId
	 * @param attrName
	 * @param attrValue
	 * @param createId
	 */
//	void insertAttExt(@Param("attId") String attId, @Param("attrName") String attrName, @Param("attrValue") String attrValue, @Param("createId") String createId);

	/**
	 * 批量保存关联关系
	 * @param list
	 */
	@Deprecated
	void addAttachRel(List<AttachRelVo> list);
	/**
	 * 批量保存关联关系
	 * @param empId
	 * @param bussessId
	 * @param relType
	 * @return
	 */
	int addAttachRel2(@Param("empId")String empId,@Param("bussessId")String bussessId,@Param("relType")String relType,@Param("attIds")String attIds);

	/**
	 * 批量删除附件关联关系
	 * @param bussessId
	 * @param relType
	 * @return
	 */
	int deleteAttachRel2(@Param("bussessId")String bussessId, @Param("relType")String relType);
	
	/**
	 * 删除附件关联关系
	 * @param bussessId
	 * @param relType
	 * @return
	 */
	int deleteAttachRelByAttId(@Param("attId")String attId);
	
	/**
	 * 批量删除附件关联关系（根据标识）
	 * @param bussessId
	 * @param relType
	 * @param attName
	 * @param attValue
	 * @return
	 */
	int deleteAttachRelFlag(@Param("bussessId")String bussessId, @Param("relType")String relType,@Param("ids")String ids);
	
	/**
	 * 通过拓展字段主键获取拓展字段信息
	 * @param extId
	 * @return
	 */
	AttachRelExtVo queryAttExtById(@Param("extId") String extId);
	/**
	 * 查询附件Id
	 * @param bussessId
	 * @param relType
	 * @return
	 */
	List<String> queryRelIdExtFlag(@Param("bussessId")String bussessId, @Param("relType")String relType,@Param("attName") String attName, @Param("attValue") String attValue);
	
	/**
	 * 修改拓展字段信息
	 * @param attachExtVo
	 */
//	void updateAttExt(AttachRelExtVo attachRelExtVo);
	
	/**
	 * 修改关联信息
	 * @param attRelId
	 */
	void updateRelIdByAttRelId(@Param("relId") String relId,@Param("modifyId") String modifyId,@Param("attRelId") String attRelId);

	List<AttachRelExtVo> listAttachExtByAttId(@Param("attId")String attId);

	List<AttachVo> batchDownAttach(SearchParam sp);

	/**
	 * 通过附件主键获取与业务相关 和 添加拓展字段的附件
	 * @param id
	 * @return
	 */
	AttachVo getAttAndRelAndExtById(@Param("attId") String attId);
	/**
	 * 通过条件查询与业务相关 和 添加拓展字段的附件
	 * @param sparam
	 * @return
	 */
	List<AttachVo> attAndRelAndExtListPage(SearchParam sparam);
}
